home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / tttdem51.zip / IODEM5.PAS < prev    next >
Pascal/Delphi Source File  |  1989-09-07  |  8KB  |  273 lines

  1. {$v-}
  2. Program IODEM5_Multiple_Input_Pages;
  3.  
  4. {
  5.  This Example is designed to illustrate how multiple input forms could be
  6.  presented to the user, and accessed with PGUp and PgDn.
  7.  
  8.  For illustration, this example uses just two input "pages", but the
  9.  template could be followed to input multiple pages.
  10.  
  11.  The basic approach is to create one input table for each "page", keep
  12.  track of which table is active, and use a character hook to trap for
  13.  PgUp and PgDn, return End_Input and proceed to other table.
  14. }
  15.  
  16. USES DOS,CRT,FASTTTT5,WINTTT5,IOTTT5;
  17.  
  18. const
  19.    HCol = lightgray;
  20.    FCol = white;
  21.    BCol = red;
  22.    Width = 35;
  23.  
  24. type
  25.    FieldStr  = string[Width];
  26.  
  27. var
  28.   Name,                  {Input Field Variables}
  29.   Addr1,
  30.   Addr2,
  31.   City,
  32.   State,
  33.   Zip,
  34.   Country,
  35.   Tel,
  36.   Source   : FieldStr;
  37.   Media    : Byte;
  38.   Comments : String;
  39.   Copies   : Byte;
  40.   Shipping,
  41.   Tax,
  42.   Total    : FieldStr;
  43.   Method   : Byte;
  44.   CardNumber,
  45.   ExpDate,
  46.   CardName : FieldStr; 
  47.  
  48.   Next_Table : byte;
  49.  
  50. {++++++++++++++++++}
  51. {                  }
  52. {  CHARACTER HOOK  }
  53. {                  }
  54. {++++++++++++++++++}
  55.  
  56. {$F+}
  57.  procedure PageCharHook(var Ch : char; var CurrentField:byte;var Refresh:byte);
  58.  {Traps for PgUp, PgDn, Esc}
  59.  var ChE : char;
  60.  begin
  61.      Case Ch of
  62.      #201 : begin       {PgUp}
  63.                 If Next_Table = 2 then
  64.                 begin
  65.                     Next_Table := 1;
  66.                     Refresh := End_Input;
  67.                 end;
  68.             end;
  69.      #209 : begin       {PgDn}
  70.                 If Next_Table = 1 then
  71.                 begin
  72.                     Next_Table := 2;
  73.                     Refresh := End_Input;
  74.                 end;
  75.             end;
  76.      #027 : begin       {Esc}
  77.                 TempMessageBoxCh(20,12,white,blue,1,'Do you want to abort edit session? (Y/N) ',ChE);
  78.                 If Upcase(ChE) = 'Y' then
  79.                 begin
  80.                     Next_Table := 0;
  81.                     Refresh := End_Input;
  82.                 end
  83.                 else
  84.                     Ch := No_Char;
  85.             end;
  86.      end; {case}
  87.  end;
  88. {$F-}
  89.  
  90. {++++++++++++++++++++++++}
  91. {                        }
  92. {  SCREEN WRITING PROCS  }
  93. {                        }
  94. {++++++++++++++++++++++++}
  95.  
  96.  Procedure Clear_Page;
  97.  {Sets up Field 1 input form}
  98.  begin
  99.      FBox(1,1,80,24,HCol,BCol,1);
  100.      ClearLine(25,white,black);
  101.      WriteCenter(2,HCol,BCol,'TECHNOJOCK''S TURBO TOOLKIT');
  102.      WriteCenter(3,HCol,BCol,'REGISTRATION');
  103.      WriteCenter(5,HCol,BCol,'Copyright 1986,1989 TechnoJock Software, Inc.');
  104.  end; {of proc Clear_Page}
  105.  
  106.  Procedure Display_Page1;
  107.  {}
  108.  begin
  109.      Clear_Page;
  110.      WriteAt(69,2,HCol,BCol,'Page 1 of 2');
  111.      WriteCenter(25,lightred,Black,'Press PgDn to enter more information or F10 to finish');
  112.      WriteAt(3,7,FCol,BCol,'Name');
  113.      WriteAt(3,9,FCol,BCol,'Address');
  114.      WriteAt(3,13,FCol,BCol,'City');
  115.      WriteAt(40,13,FCol,BCol,'State');
  116.      WriteAt(60,13,FCol,BCol,'Zip');
  117.      WriteAt(3,15,FCol,BCol,'Country');
  118.      WriteAt(3,17,FCol,BCol,'Telephone');
  119.      WriteAt(3,19,FCol,BCol,'Where did you obtain the Toolkit?');
  120.      WriteAt(3,21,FCol,BCol,'Comments');
  121.  end; {of proc Display_Page1}
  122.  
  123.  Procedure Display_Page2;
  124.  {}
  125.  begin
  126.      Clear_Page;
  127.      WriteAt(69,2,HCol,BCol,'Page 2 of 2');
  128.      WriteCenter(25,lightred,Black,'Press PgUp to enter more information or F10 to finish');
  129.      WriteAt(3,7,FCol,BCol,'Media');
  130.      WriteAt(15,7,HCol,BCol,'(Enter: 1 for 360K, 2 for 1.2Mb, or 3 for 720k)');
  131.      WriteAt(3,9,FCol,BCol,'No. of Copies required');
  132.      WriteAt(3,11,HCol,BCol,'Shipping & Handling (per Copy)');
  133.      WriteAt(8,12,HCol,BCol,'USA         $5.00');
  134.      WriteAt(8,13,HCol,BCol,'Canada/Mex $10.00');
  135.      WriteAt(8,14,HCol,BCol,'Overseas   $15.00');
  136.      WriteAt(27,14,FCol,BCol,'Shipping');
  137.      WriteAt(3,16,FCol,BCol,'Texas Residents add 8% Sales Tax');
  138.      WriteAt(3,18,FCol,BCol,'Payment Method');
  139.      WriteAt(20,18,HCol,BCol,'(Enter: 1 for MasterCard, 2 for Visa, or 3 for Check)');
  140.      WriteAt(3,20,FCol,BCol,'Card Number');
  141.      WriteAt(55,20,FCol,BCol,'Expiration Date');
  142.      WriteAt(3,22,FCol,BCol,'Name on Card');
  143.  end; {of proc Display_Page2}
  144.  
  145. {++++++++++++++++++++}
  146. {                    }
  147. {  FIELD INIT PROCS  }
  148. {                    }
  149. {++++++++++++++++++++}
  150.  Procedure Init_Vars;
  151.  {}
  152.  begin
  153.      Name := '';
  154.      Addr1:= '';
  155.      Addr2:= '';
  156.      City:= '';
  157.      State := '';
  158.      Zip := '';
  159.      Country := '';
  160.      Tel := '';
  161.      Source := '';
  162.      Media := 1;
  163.      Comments := '';
  164.      Copies := 1;
  165.      Shipping := '';
  166.      Tax := '';
  167.      Total := '';
  168.      Method := 1;
  169.      CardNumber := '';
  170.      ExpDate := '';
  171.      CardName := '';
  172.  
  173.      Next_Table := 1;
  174.  end; {of proc Init_Vars}
  175.  
  176.  Procedure Init_Table1;
  177.  {}
  178.  begin
  179.      Activate_Table(1);
  180.      Create_Fields(10);
  181.      Add_Field(1, 10,2,10,2, 13,7);
  182.      Add_Field(2,  1,3,1,3,  13,9);
  183.      Add_Field(3,  2,4,2,4,  13,11);
  184.      Add_Field(4,  3,5,3,5,  13,13);
  185.      Add_Field(5,  4,6,4,6,  46,13);
  186.      Add_Field(6,  5,7,5,7,  65,13);
  187.      Add_Field(7,  6,8,6,8,  13,15);
  188.      Add_Field(8,  7,9,7,9,  13,17);
  189.      Add_Field(9,  8,10,8,10, 38,19);
  190.      Add_Field(10, 9,1,9,1,  13,21);
  191.      String_Field(1, Name,   Replicate(width,'*'));
  192.      String_Field(2, Addr1,  Replicate(width,'*'));
  193.      String_Field(3, Addr2,  Replicate(width,'*'));
  194.      String_Field(4, City,   Replicate(25,'*'));
  195.      String_Field(5, State,  '!!');
  196.      String_Field(6, Zip,    '#####');
  197.      String_Field(7, Country,Replicate(width,'*'));
  198.      String_Field(8, Tel,    '###################');
  199.      String_Field(9, Source, Replicate(width,'*'));
  200.      String_Field(10,Comments, replicate(60,'*'));
  201.      Assign_CharHook(PageCharHook);
  202.  end; {of proc Init_Table1}
  203.  
  204.  Procedure Init_Table2;
  205.  {}
  206.  begin
  207.      Activate_Table(2);
  208.      Create_Fields(8);
  209.      Add_Field(1,  8,2,8,2, 12,7);
  210.      Add_Field(2,  1,3,1,3, 40,9);
  211.      Add_Field(3,  2,4,2,4, 40,14);
  212.      Add_Field(4,  3,5,3,5, 40,16);
  213.      Add_Field(5,  4,6,4,6, 18,18);
  214.      Add_Field(6,  5,7,5,7, 18,20);
  215.      Add_Field(7,  6,8,6,8, 74,20);
  216.      Add_Field(8,  7,1,7,1, 18,22);
  217.      Byte_Field(1, Media, '#', 1,3);
  218.      Byte_Field(2, Copies,'##',1,99);
  219.      String_Field(3, Shipping, '#####');
  220.      String_Field(4, Tax, '#####');
  221.      Byte_Field(5, Method, '#', 1,3);
  222.      String_Field(6, CardNumber, Replicate(width,'*'));
  223.      String_Field(7, ExpDate,    '##/##');
  224.      String_Field(8, CardName,   Replicate(width,'*'));
  225.      Assign_CharHook(PageCharHook);
  226.  end; {of proc Init_Table2}
  227.  
  228. {+++++++++++++++++++}
  229. {                   }
  230. {   PROCESS INPUT   }
  231. {                   }
  232. {+++++++++++++++++++}
  233.  
  234.     Procedure Process_Table1(Field:byte);
  235.     {}
  236.     begin
  237.         Activate_Table(1);
  238.         Display_Page1;
  239.         Display_All_Fields;
  240.         Process_Input(Field);
  241.     end; {of proc Process_Table1}
  242.  
  243.     Procedure Process_Table2;
  244.     {}
  245.     begin
  246.         Activate_Table(2);
  247.         Display_Page2;
  248.         Display_All_Fields;
  249.         Process_Input(1);
  250.     end; {of proc Process_Table2}
  251.  
  252.  
  253.  
  254. begin {main}
  255.     ClrScr;
  256.     Create_Tables(2);
  257.     Init_Vars;
  258.     Init_Table1;
  259.     Init_Table2;
  260.     Process_Table1(1);
  261.     Repeat
  262.          If Next_Table = 1 then
  263.             Process_Table1(10)
  264.          else
  265.          If Next_Table = 2 then
  266.             Process_Table2;
  267.     Until (Next_Table = 0) or (I_Char = #196);
  268.     If Next_Table = 0 then
  269.        {The user pressed ESC do something}
  270.     else
  271.        {The user pressed F10 go save the data}
  272. end.
  273.